<h1>规则 Bugfinder-1.1</h1>
<h2>常规信息</h2>
<p>项目<br>描述</p>
<p>规则文本<br>内部变量隐藏了同名的外部变量。</p>
<p>规则等级<br>必要</p>
<p>分析范围<br>单元</p>
<p>语言标准<br>Java</p>
<p>性能表现<br>中速</p>
<h2>规则释义</h2>
<p>如果特定范围（如内部类或方法定义）声明的名称（如成员变量或参数）与封闭范围中的另一个声明相同，则特定范围的声明将隐藏（shadow）封闭范围的声明。即遵循局部优先原则。</p>
<p>特别地，匿名类除了没有名字外，其它和局部类并没有什么不同。如果没有特殊说明，自然也隐性地包含了匿名类。</p>
<p>修复或避错建议：</p>
<p>修改变量名为不同的名字。</p>
<h2>例外情况</h2>
<p>如果是方法形参与类属性（或从父类继承）同名，则很多时候只是为了给成员变量赋值，由于这种情况很普遍，故对于这类情况不做检查。</p>
<h2>测试样例</h2>
<h3>Testfile Bugfinder_1_1.java</h3>
<p>public class Bugfinder_1_1 extends Foo {<br>    private String name;<br>    private int age;<br>    private String department;  // noncompliant</p>
<pre><code>public InnerVariableHideOuterVariableCase(String name, int age, String jobNo) {
super(jobNo);
this.name = name;
this.age = age;
}
public boolean overAge() {
int age = 18;  // noncompliant
String jobNo = &quot;No.20202384723&quot;;  // noncompliant
return false;
}
</code></pre>
<p>}</p>
<p>public class Foo {<br>    protected String jobNo;<br>    protected String department;<br>    public Foo(String jobNo, String department) {<br>        this.jobNo = jobNo;<br>        this.department = department;<br>    }<br>}</p>